package artid.com.arttogoa.glide;

import java.io.File;

import android.content.Context;
import android.graphics.drawable.Drawable;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.resource.drawable.GlideDrawable;
import com.bumptech.glide.request.animation.GlideAnimation;
import com.bumptech.glide.request.target.GlideDrawableImageViewTarget;

/**
 * Glide加载图片，中间层封装
 * 
 * @author wangfubin
 */
public class GlideUtil {
	/**
	 * 不变形加载网络图片
	 * 
	 * @param context 上下文
	 * @param url 图片链接
	 * @param errorPic 加载失败默认图片
	 * @param loadingPic 加载中默认图片
	 * @param imageView 要显示图片的控件
	 */
	public static void setImage(Context context, String url, int errorPic,
			int loadingPic, ImageView imageView) {
		Glide.with(context).load(url).asBitmap().centerCrop()
				.placeholder(loadingPic).error(errorPic)
				.into(new MyBitmapImageViewTarget(imageView));
	}

	public static void setImage1(Context context,  String url, int errorPic,
			int loadingPic, final ImageView imageView) {
		Glide.with(context).load(url).placeholder(loadingPic)
				.error(errorPic)
				.dontAnimate()
				.into(new GlideDrawableImageViewTarget(imageView) {
					
					@Override
					public void onLoadStarted(Drawable placeholder) {
						// TODO Auto-generated method stub
						super.onLoadStarted(placeholder);
					}

					@Override
					public void onResourceReady(GlideDrawable drawable,
							GlideAnimation anim) {
						imageView.setImageDrawable(drawable);
						super.onResourceReady(drawable, anim);
					}
					@Override
					public void onLoadFailed(Exception e, Drawable errorDrawable) {
						// TODO Auto-generated method stub
						super.onLoadFailed(e, errorDrawable);
					}
				});
	}

	/**
	 * @param context 上下文
	 * @param url 图片链接
	 * @param errorPic 加载失败默认图片
	 * @param loadingPic 加载中默认图片
	 * @param imageView 要显示图片的控件
	 * @param width The width in pixels to use to load the resource.
	 * @param height The height in pixels to use to load the resource.
	 * @param imageView 要显示图片的控件
	 */
	public static void setImage(Context context, String url, int errorPic,
			int loadingPic, int width, int height, ImageView imageView) {
		Glide.with(context).load(url).asBitmap().centerCrop().error(errorPic)
				// load失敗的Drawable
				.placeholder(loadingPic).override(width, height)
				.into(new MyBitmapImageViewTarget(imageView));
	}

	/**
	 * 加载sd卡指定位置图片
	 */
	public static void setFileImage(Context context, File file,
			ImageView imageView) {
		Glide.with(context).load(file).asBitmap().centerCrop()
				.into(new MyBitmapImageViewTarget(imageView));
	}

	/**
	 * 加载sd卡指定位置图片
	 */
	public static void setFileImage(Context context, int errorPic,
			int loadingPic, File file, ImageView imageView) {
		Glide.with(context).load(file).asBitmap().centerCrop().error(errorPic)
				.placeholder(loadingPic)
				.into(new MyBitmapImageViewTarget(imageView));
	}

	// public static void setFileCircleImage(final Context context, File file,
	// final ImageView imageView) {
	// Glide.with(context).load(file).asBitmap().centerCrop()
	// .into(new BitmapImageViewTarget(imageView) {
	// @Override
	// protected void setResource(Bitmap resource) {
	// RoundedBitmapDrawable circularBitmapDrawable =
	// RoundedBitmapDrawableFactory
	// .create(context.getResources(), resource);
	// circularBitmapDrawable.setCircular(true);
	// imageView.setImageDrawable(circularBitmapDrawable);
	// }
	// });
	// }

	/**
	 * 加载drawable图片
	 * 
	 * @param context 上下文
	 * @param resourceId
	 *            资源id
	 * @param errorPic
	 *            加载失败默认图片
	 * @param loadingPic
	 *            加载中默认图片
	 * @param imageView
	 *            要显示图片的控件
	 */
	public static void setDrawableImage(Context context, Integer resourceId,
			int errorPic, int loadingPic, ImageView imageView) {  
		Glide.with(context).load(resourceId).error(errorPic)// load失敗的Drawable
				.placeholder(loadingPic)// loading時候的Drawable
				.fitCenter()// 中心切圖, 會填滿
				.crossFade().into(imageView);
	}

	/**
	 * 加载gif图片
	 * 
	 * @param context
	 *            上下文
	 * @param url
	 *            图片链接
	 * @param errorPic
	 *            加载失败默认图片
	 * @param loadingPic
	 *            加载中默认图片
	 * @param imageView
	 *            要显示图片的控件
	 */
	public static void setGifImage(Context context, String url, int errorPic,
			int loadingPic, ImageView imageView) {
		Glide.with(context).load(url).asGif().error(errorPic)// load失敗的Drawable
				.placeholder(loadingPic)// loading時候的Drawable
				.fitCenter()// 中心切圖, 會填滿
				.crossFade().into(imageView);
	}

	// /**
	// * 裁剪网络图片为圆形
	// *
	// * @param context 上下文
	// * @param url 图片链接
	// * @param errorPic 加载失败默认图片
	// * @param loadingPic 加载中默认图片
	// * @param imageView 要显示图片的控件
	// */
	// public static void setCircleImage(final Context context, String url, int
	// errorPic, int loadingPic, final ImageView imageView) {
	// Glide.with( context )
	// .load( url )
	// .asBitmap()
	// .error( errorPic )// load失敗的Drawable
	// .placeholder( loadingPic )// loading時候的Drawable
	// .centerCrop()
	// .into( new BitmapImageViewTarget( imageView ) {
	// @Override protected void setResource(Bitmap resource) {
	// RoundedBitmapDrawable circularBitmapDrawable
	// = RoundedBitmapDrawableFactory.create(
	// context.getResources(), resource );
	// circularBitmapDrawable.setCircular( true );
	// imageView.setImageDrawable( circularBitmapDrawable );
	// }
	// } );
	// }
	//
	//
	// /**
	// * 裁剪网络图片为圆形
	// *
	// * @param context 上下文
	// * @param url 图片链接
	// * @param errorPic 加载失败默认图片
	// * @param loadingPic 加载中默认图片
	// * @param imageView 要显示图片的控件
	// */
	// public static void setCircleImageView(final Context context, String url,
	// int errorPic, int loadingPic, final CircleImageView imageView) {
	// Glide.with( context )
	// .load( url )
	// .asBitmap()
	// .error( errorPic )// load失敗的Drawable
	// .placeholder( loadingPic )// loading時候的Drawable
	// .centerCrop()
	// .into( new BitmapImageViewTarget( imageView ) {
	// @Override protected void setResource(Bitmap resource) {
	// RoundedBitmapDrawable circularBitmapDrawable
	// = RoundedBitmapDrawableFactory.create(
	// context.getResources(), resource );
	// imageView.setImageDrawable( circularBitmapDrawable );
	// }
	// } );
	// }
}
